import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 创建示例数据
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=365, freq='D')
temperatures = 20 + 10 * np.sin(2 * np.pi * np.arange(365) / 365) + np.random.normal(0, 3, 365)
sales = 1000 + 500 * np.sin(2 * np.pi * np.arange(365) / 365) + np.random.normal(0, 100, 365)

# 创建DataFrame
df = pd.DataFrame({
    '日期': dates,
    '温度': temperatures,
    '销售额': sales
})

# 设置中文字体（如果需要显示中文）
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号

# 创建综合图表
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
fig.suptitle('年度数据分析报告', fontsize=16)

# 1. 温度时间序列图
axes[0, 0].plot(df['日期'], df['温度'], color='red', linewidth=1)
axes[0, 0].set_title('年度温度变化')
axes[0, 0].set_xlabel('日期')
axes[0, 0].set_ylabel('温度 (°C)')
axes[0, 0].grid(True)

# 2. 销售额时间序列图
axes[0, 1].plot(df['日期'], df['销售额'], color='blue', linewidth=1)
axes[0, 1].set_title('年度销售额变化')
axes[0, 1].set_xlabel('日期')
axes[0, 1].set_ylabel('销售额 (元)')
axes[0, 1].grid(True)

# 3. 温度分布直方图
axes[1, 0].hist(df['温度'], bins=30, color='orange', edgecolor='black')
axes[1, 0].set_title('温度分布')
axes[1, 0].set_xlabel('温度 (°C)')
axes[1, 0].set_ylabel('频次')

# 4. 温度与销售额散点图
axes[1, 1].scatter(df['温度'], df['销售额'], alpha=0.5, color='green')
axes[1, 1].set_title('温度与销售额关系')
axes[1, 1].set_xlabel('温度 (°C)')
axes[1, 1].set_ylabel('销售额 (元)')

plt.tight_layout()
plt.show()

# 计算相关性
correlation = np.corrcoef(df['温度'], df['销售额'])[0, 1]
print(f"温度与销售额的相关系数: {correlation:.3f}")

# 按月份分组分析
df['月份'] = df['日期'].dt.month
monthly_avg = df.groupby('月份')[['温度', '销售额']].mean()

# 月度平均数据可视化
fig, ax1 = plt.subplots(figsize=(12, 6))

color = 'tab:red'
ax1.set_xlabel('月份')
ax1.set_ylabel('平均温度 (°C)', color=color)
line1 = ax1.plot(monthly_avg.index, monthly_avg['温度'], color=color, marker='o', label='平均温度')
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('平均销售额 (元)', color=color)
line2 = ax2.plot(monthly_avg.index, monthly_avg['销售额'], color=color, marker='s', label='平均销售额')
ax2.tick_params(axis='y', labelcolor=color)

plt.title('月度平均温度与销售额对比')
plt.grid(True)

# 添加图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')

plt.show()
